11
תגובות
אני מנסה לצור משחק רב משתתפים.
מדובר במשחק קלפים, כך שמעט מאוד מידע עובר בין השרת ללקוח, אבל כל כמה שניות.

קראתי באינטרנט והבנתי שהטכנולוגיות המתאימות הן:
long polling (בקשה שאיכשהו תשאר פתוחה עד שיש מידע חדש)
web sockets (פרוטוקול חדש, שאין לי מושג איך אני אמור לצור את צד השרת שלו)
http push (אין לי מושג איך זה עובד)

את הקונספט של הטכנולוגיות הבנתי, אבל לא מצאתי באינטרנט שום מדריך שמסביר כיצד ניתן להשתמש בהן באמצעות JS וPHP.

יכול להיות שאני לא מחפש על פי מילות המפתח המתאימות כי אני באמת לא מכיר את הנושא.
מישהו יוכל לתת לי המלצה למדריך, או יותר טוב, לכתוב מדריך כאן באתר?

11 תשובות

avatar ענה intval ב 15 לאוגוסט 2012 #

רוב הסיכויים שלא מצאת מדריכים לנושאים האלה כיוון ש-PHP לא תהיה הכלי המתאים במקרים האלה.

Long Polling היא פשוט בקשה מאוד ארוכה. כמו סקריפט שהיית כותב בו sleep(10); ופותח בדפדפן - הדפדפן היה מחכה לתוכן 10 שניות. במקרה הזה היית עושה הרבה בקשות ajax או iframe אל הסקריפט שלך, שהיה בודק אחת לכמה שניות אם יש תוכן חדש בדאטאבייס, אם לא, מריץ עוד sleep, עד שבדאטאבייס היה מופיע התור של השחקן השני. לאחר מכן הסקריפט היה פולט את התוכן של התור, הבקשה נסגרת ונשלחת בקשה הבאה.

Web Sockets מוסיף לדפדפן פונקציונליות חדשה מעולם אחר. פה אתה כבר צריך שרת חדש שמסוגל לעבוד עם סוקטים פתוחים.

Server Sent Events יותר פשוט, למרות שגם פה php/apache לא הטכנולוגיה הכי מתאימה.
הקוד שיתקבל יראה בערך ככה:

<?php
if(isset($_GET['sse']))
{
  header("Content-Type: text/event-stream\n\n");
  while( $nothingNewInDatabase )
  {
    sleep(1);
  }

  echo "data: $newDatabaseData \n";
}
?>

<script>
  var source = new EventSource('a.php?sse');
  source.onmessage = function (event) {
    alert(event.data);
  };
</script>



בשביל דברים כאלה יש פתרונות מוכנים, כמו ה- ape project או sockets.io

avatar ענה questioner ב 15 לאוגוסט 2012 #

1) מה יהיה הכלי המתאים? איזו שפה?
2) תוכל לפרט עוד על הפתרונות המוכנים? ניתן להשתמש בהם יחד עם PHP?

avatar ענה intval ב 16 לאוגוסט 2012 #

הדבר הראשון שעלה לך לראש לא היה להעתיק את המילים ape project לגוגל ?

avatar ענה questioner ב 16 לאוגוסט 2012 #

חיפשתי, הצעת כמה דברים, שאלתי מה הכי טוב.

כתוב שם שצד השרת גם בJS, הם מדברים על שימוש בNode.js?

avatar ענה Y_Y ב 16 לאוגוסט 2012 #

תשמע אני לא חושב שצריך פה איזה חיבור רציף לשרת..

תנסה לתזמן שליחות AJAX כל מספר שניות בכדי לבדוק מהלכים של המשתמש השני ולגרור תגובה בהתאם לתוצאה..

avatar ענה questioner ב 16 לאוגוסט 2012 #

מדובר כאן במשחק קלפים, כך שתאורתית פעולה יכולה להיות כל חצי שנייה, וזה אומר המון בקשות בזבזניות.
עזוב רגע א הדוגמה של משחק קלפים. תחשוב שאני צריך לבנות צ'אט. בקשות AJAX רגילות הן לא הפתרון כאן.

avatar ענה JBStyle ב 16 לאוגוסט 2012 #

אני מציע גם שאם יש לך אפשרות תשמור את הטבלה של זה בRAM .
בכל מקרה נכנסת לAPE ?

avatar ענה Y_Y ב 16 לאוגוסט 2012 #

דווקא צ'אט כן הייתי עושה בפולינג AJAX פשוט מאוד..תעבורה אפסית

עוד בנושא שצויין
http://www.html5rocks.com/en/tutorials/eventsource/basics/

avatar ענה questioner ב 16 לאוגוסט 2012 #

לשמור בRAM זה אומר טבלה מסוג MEMORY?

avatar ענה JBStyle ב 16 לאוגוסט 2012 #

כן .

avatar ענה intval ב 17 לאוגוסט 2012 #

ape project מתפקד בתור שרת בפני עצמו. את הקוד ל callbackים שלו אתה כותב ב JS
והם נותנים לך אפשרות לעבוד עם מסד נתונים.

רוב הצ'אטים שהי פעם ראית בנויים על ajax פרימיטיבי ששולח בקשה לשרת כל כמה שניות. בדיוק כמו הצ'אט כאן.